ক্লোজার (Clojure) এ Ring এবং Compojure হলো ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য দুটি গুরুত্বপূর্ণ লাইব্রেরি। Ring একটি ওয়েব সার্ভার এবং রিকোয়েস্ট-রেসপন্স হ্যান্ডলিংয়ের জন্য বেস লাইব্রেরি সরবরাহ করে, এবং Compojure একটি DSL (Domain-Specific Language) যা Ring এর উপর ভিত্তি করে রাউটিং সহজ করে।
Ring ক্লোজারে ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য একটি স্ট্যান্ডার্ড লাইব্রেরি। এটি জাভার Servlet API এর মতো কাজ করে এবং মূলত রিকোয়েস্ট ও রেসপন্সের মধ্যে একটি মিথস্ক্রিয়া (interaction) তৈরি করে। Ring এর মাধ্যমে বিভিন্ন ওয়েব সার্ভার হ্যান্ডল করা, মিদলওয়্যার (middleware) ব্যবহার, এবং HTTP রিকোয়েস্ট/রেসপন্স ম্যানিপুলেশন করা যায়।
Ring এর মূল কাজ হলো HTTP রিকোয়েস্ট এবং রেসপন্স ম্যানেজ করা, যা ওয়েব অ্যাপ্লিকেশন তৈরি করতে সহায়ক।
(require '[ring.adapter.jetty :refer [run-jetty]])
(defn handler [request]
{:status 200
:headers {"Content-Type" "text/plain"}
:body "Hello, World!"})
(run-jetty handler {:port 3000})
এখানে, handler
ফাংশন একটি রিং হ্যান্ডলার যা Hello, World!
মেসেজ প্রদান করে। run-jetty
ফাংশন ব্যবহার করে ৩০০০ পোর্টে সার্ভার চালু করা হয়েছে।
Compojure হলো একটি ক্লোজার লাইব্রেরি যা Ring এর উপর ভিত্তি করে রাউটিং সহজ করে। এটি একটি DSL হিসেবে কাজ করে, যা রিকোয়েস্ট URL এর উপর ভিত্তি করে নির্দিষ্ট হ্যান্ডলার কল করতে পারে। Compojure এর মাধ্যমে URL পাথ এবং HTTP মেথড অনুযায়ী অ্যাপ্লিকেশনের বিভিন্ন অংশে সহজেই রাউটিং করা যায়।
Compojure মূলত Ring এর হ্যান্ডলার তৈরি এবং বিভিন্ন রিকোয়েস্ট ম্যানেজ করতে সহায়ক।
(require '[compojure.core :refer :all])
(require '[compojure.route :as route])
(require '[ring.adapter.jetty :refer [run-jetty]])
(defroutes app-routes
(GET "/" [] "Welcome to the homepage!")
(GET "/hello/:name" [name] (str "Hello, " name "!" ))
(route/not-found "Page not found"))
(run-jetty app-routes {:port 3000})
এখানে, app-routes
নামের একটি রাউট তৈরি করা হয়েছে যা বিভিন্ন URL এর জন্য রেসপন্স প্রদান করে। GET "/"
হোমপেজের জন্য এবং GET "/hello/:name"
ব্যবহারকারীর নামের ভিত্তিতে মেসেজ প্রদান করে।
Ring এবং Compojure একসাথে ব্যবহার করে সহজেই RESTful API এবং ওয়েব অ্যাপ্লিকেশন তৈরি করা যায়। নিচের উদাহরণে একটি সাধারণ API তৈরি করা হয়েছে যেখানে Ring এর মাধ্যমে সার্ভার হ্যান্ডলিং এবং Compojure এর মাধ্যমে রাউটিং করা হয়েছে:
(require '[ring.adapter.jetty :refer [run-jetty]])
(require '[compojure.core :refer :all])
(require '[compojure.route :as route])
(defroutes app-routes
(GET "/" [] "Welcome to our API")
(GET "/add/:x/:y" [x y]
(let [x (Integer/parseInt x)
y (Integer/parseInt y)]
(str "Result: " (+ x y))))
(route/not-found "Page not found"))
(run-jetty app-routes {:port 3000})
এখানে /add/:x/:y
রাউটটি x
এবং y
নাম্বারের যোগফল প্রদান করে।
লাইব্রেরি | ভূমিকা | ব্যবহারের ক্ষেত্র |
---|---|---|
Ring | HTTP রিকোয়েস্ট এবং রেসপন্স ম্যানেজ করে | ওয়েব সার্ভার, মিদলওয়্যার ব্যবহার |
Compojure | URL ভিত্তিক রাউটিং সহজ করে | RESTful API, ওয়েব অ্যাপ্লিকেশন রাউটিং |
Ring এবং Compojure ক্লোজারে ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য খুবই কার্যকরী দুটি টুল, যা ওয়েব সার্ভার এবং রাউটিং সহজ করে। Ring মূলত HTTP সার্ভারের কাজ এবং রিকোয়েস্ট ম্যানেজমেন্ট করে, আর Compojure URL ভিত্তিক রাউটিং পরিচালনা করে।
common.read_more